#include "ZapiszPlik.h"
#include "DaneWej.h"
#include <fstream>
#include <stdio.h>


using namespace std;
//==============================================================================

void ZapiszPlik::zapiszBMP(Skan3D* skan3d, const char* nazwaPliku) {

}
//==============================================================================

void ZapiszPlik::zapiszPPM(Skan3D* skan3d, const char* nazwaPliku) {
    cout << "zapiszPBM: " << nazwaPliku << endl;
    FILE* f = fopen(nazwaPliku, "w");
    fclose(f);
    fstream plik(nazwaPliku, std::ios::in | std::ios::out);
    if (plik.fail()) { //nie ma pliku
        cout << "Brak Pliku!" << endl;
    }
    // cout << "zapiszPBM: plik otwarty" << std::endl;
    plik << "P3" << endl;

    plik << (skan3d->maxK) << " " << (skan3d->maxW) << endl;
    //cout << (skan3d->maxK) << " " << (skan3d->maxW) << endl;

    plik << "255" << endl;

    for (int I = 0; I < skan3d->maxW; I++) {
        for (int J = 0; J < skan3d->maxK; J++) {
            plik << (skan3d->punkt[I][J]).k.R << " " << (skan3d->punkt[I][J]).k.G << " " << (skan3d->punkt[I][J]).k.B << " ";
        }
        plik << endl;
    }
    //cout << "zapiszPBM: zapisano P3" << std::endl;

    plik.close();
    //cout << "zapiszPBM: plik zamkniety" << std::endl;
}
//==============================================================================

void ZapiszPlik::zapiszPBM(Skan3D* skan3d, const char* nazwaPliku) {
}
//==============================================================================

void ZapiszPlik::zapiszPPM2(Skan3D* skan3d, const char* nazwaPliku) {
    cout << "zapiszPBM2: " << nazwaPliku << endl;
    FILE* f = fopen(nazwaPliku, "w");
    fclose(f);
    fstream plik(nazwaPliku, std::ios::in | std::ios::out);
    if (plik.fail()) { //nie ma pliku
        cout << "Brak Pliku!" << endl;
    }
    //cout << "zapiszPBM2: plik otwarty" << std::endl;
    plik << "P3" << endl;

    plik << (skan3d->maxK) << " " << (skan3d->maxW) << endl;
    //cout << (skan3d->maxK) << " " << (skan3d->maxW) << endl;

    plik << "255" << endl;

    for (int I = 0; I < skan3d->maxW; I++) {
        for (int J = 0; J < skan3d->maxK; J++) {
            int R = (int) ((255.0 * (skan3d->punkt[I][J]).r) / 8.0);
            plik << R << " " << R << " " << R << " ";
        }
        plik << endl;
    }
    //cout << "zapiszPBM2: zapisano P3" << std::endl;

    plik.close();
    //cout << "zapiszPBM2: plik zamkniety" << std::endl;
}
//==============================================================================

void ZapiszPlik::zapiszPGM_rgb(Skan3D* skan3d, const char* nazwaPliku, zpKolor zpk) {

    cout << "zapiszPBM-: " << nazwaPliku << endl;
    cout << "zapiszPBM---: (" << skan3d->maxW << " ; " << skan3d->maxK << ")" << endl;
    FILE* f = fopen(nazwaPliku, "w");
    fclose(f);
    fstream plik(nazwaPliku, std::ios::in | std::ios::out);
    if (plik.fail()) { //nie ma pliku
        cout << "Brak Pliku!" << endl;
    }
    // cout << "zapiszPBM: plik otwarty" << std::endl;
    plik << "P2" << endl;

    plik << (skan3d->maxK) << " " << (skan3d->maxW) << endl;
    //cout << (skan3d->maxK) << " " << (skan3d->maxW) << endl;

    plik << "255" << endl;

    for (int I = 0; I < skan3d->maxW; I++) {
        for (int J = 0; J < skan3d->maxK; J++) {
            switch (zpk) {
                case zpRed: plik << (skan3d->punkt[I][J]).k.R << " ";
                    break;
                case zpGreen: plik << (skan3d->punkt[I][J]).k.G << " ";
                    break;
                case zpBlue: plik << (skan3d->punkt[I][J]).k.B << " ";
                    break;
            }
        }
        plik << endl;
    }
    //cout << "zapiszPBM: zapisano P3" << std::endl;

    plik.close();
    //cout << "zapiszPBM: plik zamkniety" << std::endl;

}
//==============================================================================

void ZapiszPlik::zapiszPPM6(double** t, int w, int k, const char* nazwaPliku) {
    cout << "zapiszPPM6: " << nazwaPliku << endl;
    FILE* f = fopen(nazwaPliku, "w");
    fclose(f);
    fstream plik(nazwaPliku, std::ios::in | std::ios::out);
    if (plik.fail()) { //nie ma pliku
        cout << "Brak Pliku!" << endl;
    }
    // cout << "zapiszPBM: plik otwarty" << std::endl;
    plik << "P3" << endl;
    plik << k << " " << w << endl;
    plik << "255" << endl;
    //plik.close();
    //plik.open(nazwaPliku, std::ios::app | std::ios::binary);

    for (int I = 0; I < w; I++) {
        for (int J = 0; J < k; J++) {
            plik << int( Abs(t[I][J])*255) << " ";
            plik << int( Abs(t[I][J])*255) << " ";
            plik << int( Abs(t[I][J])*255) << " ";
        }
        plik << endl;
    }
    //cout << "zapiszPBM: zapisano P3" << std::endl;

    plik.close();
    //cout << "zapiszPBM: plik zamkniety" << std::endl;

}
//==============================================================================
//==============================================================================
//==============================================================================
